package LeetCodeHot100TopInterview;

public class Q088_MergeArr {

    //合并两个有序数组 arr2 -> arr1
    //要求不创建新的数组
    //你可以假设 nums1 的空间大小等于 m + n
    //挺骚的  逆向归并操作
    public void merge(int[] nums1, int m, int[] nums2, int n) {

//        if (nums1.length == 1 && nums1[0] == 0){
//            nums1[0] = nums2[0];
//        }

        //指针准备好...
        //指向两边实际数据末尾
        int p1 = m - 1;
        int p2 = n - 1;
        //卡着 nums1末尾
        int p0 = nums1.length - 1;

        //merge...
        while (p1 != -1 && p2 != -1 && nums1[p0] == 0){
            if (nums1[p1] > nums2[p2]){
                nums1[p0--] = nums1[p1];
                nums1[p1--] = 0;
            }else {
                nums1[p0--] = nums2[p2--];
            }
        }

        //num2没比完
        while (p2 != -1){
            nums1[p0--] = nums2[p2--];
        }

        for (int i : nums1) {
            System.out.println(i);
        }


    }

    public static void main(String[] args) {
        Q088_MergeArr fun = new Q088_MergeArr();

        int[] nums1 = new int[]{2,0};
        int[] nums2 = new int[]{1};
        fun.merge(nums1, 1, nums2, 1);
    }


}
